package com.godtree.mybatisplus;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;

import java.util.List;

/**
 * 基于MP的 IService 新增了1个方法： saveBatchSomeColumn 其中： 1，saveBatchSomeColumn 批量插入
 *
 * @param <T> 实体
 * @author huangwenda
 * @date 2021年05月05日20:49:03
 */
public interface SuperService<T> extends IService<T> {

  /**
   * 批量保存数据
   * <p>
   * 注意：该方法仅仅测试过mysql
   *
   * @param entityList 实体对象列表
   * @return 是否成功
   */
  default boolean saveBatchSomeColumn(List<T> entityList) {
    return SqlHelper.retBool(saveBatchSomeColumnReturnValue(entityList));
  }

  /**
   * 批量保存数据
   *
   * @param entityList 实体对象列表
   * @return 影响行数
   */
  default int saveBatchSomeColumnReturnValue(List<T> entityList) {
    if (entityList.isEmpty()) {
      return 0;
    }
    int batchSize = 5000;
    if (entityList.size() > batchSize) {
      throw new MybatisPlusException("批量插入长度不能超过5000条");
    }
    return ((SuperMapper) getBaseMapper()).insertBatchSomeColumn(entityList);
  }
}
